package NO20;

import java.io.LineNumberInputStream;
import java.util.ArrayList;

/**
 *  1  2  3  4
    5  6  7  8
    9  10 11 12
    13 14 15 16
    
    将这个数组按照下面的顺序输出，即从外到里，想象为一个贪吃蛇一口气把数组元素全部吃掉
    
    1  2  3  4 8  12 16 15 14 13 9  5 6  7 11 10
 * @author swg
 *
 */
public class printMatrix {
	public static ArrayList<Integer> printMatrix(int [][] matrix) {
	       ArrayList<Integer> list = new ArrayList<Integer>();
	       //获取行数
	       int row = matrix.length;
	       
	       while(row != 0){
	    	   //遍历第一行，放进容器中
	    	   for(int i=0;i<matrix[0].length;i++){
	    		   list.add(matrix[0][i]);
	    	   }
	    	   
	    	   //当row为只有一行了，那么下面就没有必要再旋转了，上面遍历完就结束了
	    	   if(row == 1)
	    		   break;
	    	   
	    	   //删除上面遍历的数组的第一行，然后旋转这个数组并返回
	    	   matrix = revert(matrix);
	    	   row = matrix.length;
	       }
	       return list;
    }

	private static int[][] revert(int[][] matrix) {
		//先取出数组的行数和列数
		int rows = matrix.length;
		int cols = matrix[0].length;
		
		//删除原数组的第一行，然后根据删除后的行数和列数初始化新的旋转数组
		int[][] newMatrix = new int[cols][rows-1];
		
		//给新的旋转数组赋值
		for(int j=cols-1;j>=0;j--){
			for(int i=1;i<rows;i++){
				newMatrix[cols-j-1][i-1] = matrix[i][j];
			}
		}
		return newMatrix;
	}
	
	public static void main(String[] args) {
		int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		ArrayList<Integer> list = new ArrayList<>();
		list = printMatrix(arr);
		for(int temp : list){
			System.out.print(temp+" ");
		}
	}
}
